// 浏览器环境入口文件
import { PPTXExporter } from './index';
import type { PPTRaw } from './types/slides';

// 创建浏览器专用的包装类
class BrowserPPTXExporter extends PPTXExporter {
  constructor(pptData: PPTRaw, options?: any) {
    super(pptData, options);
  }

  // 浏览器环境下的智能导出 - 始终返回Blob
  public async smartExport(compression: boolean = false): Promise<Blob> {
    return this.toBlob(compression);
  }

  // 浏览器专用的下载方法
  public async downloadFile(
    fileName: string = 'presentation.pptx',
    compression: boolean = false
  ): Promise<void> {
    try {
      const blob = await this.toBlob(compression);

      // 创建下载链接
      const url = URL.createObjectURL(blob);
      const a = document.createElement('a');
      a.href = url;
      a.download = fileName;
      a.style.display = 'none';

      // 触发下载
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);

      // 清理URL对象
      URL.revokeObjectURL(url);

      console.log(`✅ 文件 ${fileName} 下载完成`);
    } catch (error) {
      console.error('❌ 下载失败:', error);
      throw error;
    }
  }

  // 浏览器专用的预览方法
  public async openInNewTab(compression: boolean = false): Promise<void> {
    try {
      const blob = await this.toBlob(compression);
      const url = URL.createObjectURL(blob);
      const newWindow = window.open(url, '_blank');

      if (!newWindow) {
        throw new Error('无法打开新窗口，请检查浏览器弹窗设置');
      }

      // 延迟清理URL对象
      setTimeout(() => {
        URL.revokeObjectURL(url);
      }, 1000);

      console.log('✅ 在新标签页中打开预览');
    } catch (error) {
      console.error('❌ 预览失败:', error);
      throw error;
    }
  }
}

// 将类挂载到window对象
if (typeof window !== 'undefined') {
  (window as any).PPTXExporter = BrowserPPTXExporter;
  (window as any).PPTXExporter.version = '1.0.0';

  // 添加一些便捷方法
  (window as any).PPTXExporter.createExporter = (
    pptData: PPTRaw,
    options?: any
  ) => {
    return new BrowserPPTXExporter(pptData, options);
  };

  console.log('🎉 PPTX Exporter 已加载到浏览器环境');
  console.log(
    '📖 使用方法: const exporter = new PPTXExporter(pptData); 或 PPTXExporter.createExporter(pptData)'
  );
}

// 默认导出
export default BrowserPPTXExporter;
export { BrowserPPTXExporter as PPTXExporter };
export type { PPTRaw };
